package com.tecnoagrosoft.zafra.control.activity.fragment;

import java.text.DecimalFormat;
import java.util.ArrayList;

import org.apache.http.NameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import com.tecnoagrosoft.zafra.control.activity.R;
import com.tecnoagrosoft.zafra.control.model.android.ItemsListChicago;
import com.tecnoagrosoft.zafra.control.utils.AdaptadorList;
import com.tecnoagrosoft.zafra.control.utils.HttppostGenerate;
import com.tecnoagrosoft.zafra.control.utils.UtilsConfig;
import com.tecnoagrosoft.zafra.control.utils.UtilsGeneric;

public class PrecioChicagoFragment extends Fragment {

	final String TAG = "PhoneSignalStrength";

	TextView textViewLog;
	TextView editTextLog;
	Spinner tipoConsulta;
	Button consultar;
	private ListView lista;

	HttppostGenerate post;
	protected String mess = "";
	private ProgressDialog pDialog;
	private String mensajeString = "";
	private ConsultaTask mConsultaTask = null;
	ArrayList<ItemsListChicago> datos = new ArrayList<ItemsListChicago>();
	DecimalFormat formateador = new DecimalFormat("#,###.##");
	View rootView;

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

		rootView = inflater.inflate(R.layout.fragment_precio_chicago, container, false);

		loadHeader();
		datos.add(new ItemsListChicago(0, getString(R.string.men_no_precio_chicago), "", getString(R.string.graciasConfiar), "", R.drawable.ic_action_go_to_today,
				R.drawable.ic_action_next_item));
		loadtable();

		return rootView;
	}

	private void loadHeader() {
		tipoConsulta = (Spinner) rootView.findViewById(R.id.spinnerConsulta);
		consultar = (Button) rootView.findViewById(R.id.consulta_precio);

		ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(rootView.getContext(), R.array.material_array, android.R.layout.simple_spinner_item);
		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		tipoConsulta.setAdapter(adapter);
		consultar.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				// 

				if (UtilsGeneric.isConected(rootView.getContext())) {

					String url = "";
					switch (tipoConsulta.getSelectedItemPosition()) {
					case 0:
						url = UtilsConfig.rutaChicagoSoja;
						break;
					case 1:
						url = UtilsConfig.rutaChicagoTrigo;
						break;
					case 2:
						url = UtilsConfig.rutaChicagoMaiz;
						break;
					case 3:
						url = UtilsConfig.rutaChicagoArroz;
						break;

					case 4:

						break;

					default:
						break;
					}

					mensajeString = "consultando al servidor";
					mConsultaTask = new ConsultaTask();
					mConsultaTask.execute(url, null);

					loadtable();
				} else {
					Toast.makeText(rootView.getContext(), getResources().getString(R.string.men_nointernet), Toast.LENGTH_LONG).show();

				}
			}
		});

	}

	private void clearTable() {
		datos.clear();
	}

	/**
	 * carga la lista de parcelas en listview
	 */
	private void loadtable() {

		lista = (ListView) rootView.findViewById(R.id.ListView_precio_chicago);
		lista.setAdapter(new AdaptadorList(rootView.getContext(), R.layout.item_list_chicago, datos) {
			@Override
			public void onEntrada(Object entrada, View view) {
				if (entrada != null) {
					TextView texto_id_item = (TextView) view.findViewById(R.id.texto_item_id);
					if (texto_id_item != null)
						texto_id_item.setText(((ItemsListChicago) entrada).getId().toString());

					TextView texto_superior_entrada = (TextView) view.findViewById(R.id.textoTitulo_item_list);
					if (texto_superior_entrada != null)
						texto_superior_entrada.setText(((ItemsListChicago) entrada).getTextoTitulo());

					TextView texto_superior_entrada_rith = (TextView) view.findViewById(R.id.textoTitulo_item_rith);
					if (texto_superior_entrada_rith != null)
						texto_superior_entrada_rith.setText(((ItemsListChicago) entrada).getTextoTituloRith());

					TextView texto_inferior_entrada = (TextView) view.findViewById(R.id.textoDescripcion_item_list);
					if (texto_inferior_entrada != null)
						texto_inferior_entrada.setText(((ItemsListChicago) entrada).getTextoDescripcion());

					TextView texto_inferior_entrada_rith = (TextView) view.findViewById(R.id.textoDescripcion_item_rith);
					if (texto_inferior_entrada_rith != null) {
						texto_inferior_entrada_rith.setText(((ItemsListChicago) entrada).getTextoDescripcionRith());

					}

					ImageView imagen_entrada = (ImageView) view.findViewById(R.id.imagen_item_list);
					if (imagen_entrada != null)
						imagen_entrada.setImageResource(((ItemsListChicago) entrada).getIdImagen());

					ImageView imagen_entrada_orientacion = (ImageView) view.findViewById(R.id.imagen_item_orientacion);
					if (imagen_entrada_orientacion != null) {
						int im = ((ItemsListChicago) entrada).getIdImagenOrientacion();
						imagen_entrada_orientacion.setImageResource(im);
						if (im == R.drawable.ic_action_collapse) {
							texto_inferior_entrada_rith.setTextColor(getResources().getColor(R.color.green_nivel_1));
						} else if (im == R.drawable.ic_action_expand) {

							texto_inferior_entrada_rith.setTextColor(getResources().getColor(R.color.red));
						} else if (im == R.drawable.ic_action_next_item) {

							texto_inferior_entrada_rith.setTextColor(getResources().getColor(R.color.blue));
						}

					}

				}
			}
		});

		lista.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> pariente, View view, int posicion, long id) {
				
				/*
				 * sera utilizado en versiones superiores donde al elegir un item podra obtener mayores datos.
				 * 
				 */
				
				// ItemsListChicago elegido = (ItemsListChicago)pariente.getItemAtPosition(posicion);

			}
		});

	}

	private class ConsultaTask extends AsyncTask<String, Void, Boolean> {

		private String url_local;

		protected void onPreExecute() {
			// para el progress dialog
			pDialog = new ProgressDialog(rootView.getContext());
			pDialog.setMessage(mensajeString);
			pDialog.setIndeterminate(false);
			pDialog.setCancelable(false);
			pDialog.show();
		}

		@Override
		protected Boolean doInBackground(String... params) {
			// 
			boolean respuesta = false;

			url_local = params[0];
			if (consultaPrecioChicago(url_local)) {
				respuesta = true;
			}

			return respuesta;
		}

		@Override
		protected void onPostExecute(final Boolean success) {
			mConsultaTask = null;
			pDialog.dismiss();//

			if (success) {

				loadtable();
				printMess();
			} else {
				printMess();
			}
			setMess("");

		}

		@Override
		protected void onCancelled() {
			mConsultaTask = null;
			pDialog.dismiss();//

		}
	}

	private boolean consultaPrecioChicago(String URL_connect_local) {

		ArrayList<NameValuePair> postparameters2send = new ArrayList<NameValuePair>();

		// postparameters2send.add(new BasicNameValuePair("datosTable",
		// strJson));
		// postparameters2send.add(new BasicNameValuePair("email", emailUser));

		post = new HttppostGenerate();
		JSONObject jsonObject = post.getserverdata(postparameters2send, URL_connect_local);

		double diferencia = 0;
		double open = 0;
		double settle = 0;
		double promedio = 0;
		int orientacion;
		String des = "";
		// si lo que obtuvimos no es null
		if (jsonObject != null && jsonObject.length() > 0) {

			try {

				switch (tipoConsulta.getSelectedItemPosition()) {
				case 0:
					des = getString(R.string.soja_chicago);
					break;
				case 1:
					des = getString(R.string.trigo_chicago);
					break;
				case 2:
					des = getString(R.string.maiz_chicago);
					break;
				case 3:
					des = getString(R.string.arroz_chicago);
					break;

				case 4:

					break;

				default:
					break;
				}

				JSONArray sincros = jsonObject.getJSONArray("cotizacion");
				clearTable();
				// Recorremos el array con los elementos cities
				for (int i = 0; i < sincros.length(); i++) {
					JSONObject sincro = sincros.getJSONObject(i);
					// System.out.println(sincro.getString("data"));
					// mess = sincro.getString("data");

					String cadena = sincro.getString("data");

					cadena = cadena.replace("'", "");
					cadena = cadena.replace("]]", "");
					cadena = cadena.replace("[[", "");
					cadena = cadena.replace("[", "");
					String diaPuntoArray[] = cadena.split("],");

					for (String diaPunto : diaPuntoArray) {

						// System.out.println("cadena  " + diaPunto);
						String cadenaArray[] = diaPunto.split(",");
						settle = Double.parseDouble(cadenaArray[4]);
						open = Double.parseDouble(cadenaArray[1]);
						diferencia = settle - open;
						orientacion = R.drawable.ic_action_next_item;
						if ((int) diferencia > 0) {
							orientacion = R.drawable.ic_action_collapse;
						} else if ((int) diferencia < 0) {

							orientacion = R.drawable.ic_action_expand;
						}
						// System.out.println("diferencia  " + (int)
						// diferencia);

						promedio = ((settle * 100) / open) - 100;
						datos.add(new ItemsListChicago(i, "Chicago " + des, formateador.format(settle), cadenaArray[0].replace("\"", ""), formateador.format(diferencia) + " ("
								+ formateador.format(promedio) + "%)", R.drawable.ic_action_go_to_today, orientacion));

						// for (String cadenaBasica : cadenaArray) {
						// System.out.println("sepacaion  " + cadenaBasica);
						//
						// }

					}

				}

			} catch (JSONException e) {
				// 
				setMess(getString(R.string.men_inconveniente_repuesta));
				e.printStackTrace();
				return false;
			}
			setMess(getString(R.string.men_consul_satisfactoria));
			return true;

		} else { // json obtenido invalido verificar parte WEB.
			setMess(getString(R.string.men_error_comunicacion));

			return false;
		}

	}

	public String getMess() {
		return mess;
	}

	public void setMess(String mess) {

		this.mess = mess;

	}

	public void printMess() {
		Toast.makeText(rootView.getContext(), getMess(), Toast.LENGTH_LONG).show();

	}

}
